<!DOCTYPE html>
<html lang="">

<head>
	<meta name="generator" content="Hugo 0.73.0" />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="author" content="Ap Chen ">
<meta name="description" content="传输层总结 TCP 三报文握手 点外卖：server店家等订单（连接请求），client设置参数下单（连接请求），店家发货（发送确认应答），应答一到c" />
<meta name="keywords" content="blog" />
<meta name="robots" content="noodp" />

<link rel="canonical" href="https://fziks.gitee.io/notes/computer-network/%E4%BC%A0%E8%BE%93%E5%B1%82%E6%80%BB%E7%BB%93/" />

<meta itemprop="name" content="5.传输层">
<meta itemprop="description" content="传输层总结 TCP 三报文握手 点外卖：server店家等订单（连接请求），client设置参数下单（连接请求），店家发货（发送确认应答），应答一到c">
<meta itemprop="datePublished" content="2020-04-30T00:00:00&#43;00:00" />
<meta itemprop="dateModified" content="2020-04-30T00:00:00&#43;00:00" />
<meta itemprop="wordCount" content="1277">



<meta itemprop="keywords" content="cn,notes," />
<meta property="og:title" content="5.传输层" />
<meta property="og:description" content="传输层总结 TCP 三报文握手 点外卖：server店家等订单（连接请求），client设置参数下单（连接请求），店家发货（发送确认应答），应答一到c" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://fziks.gitee.io/notes/computer-network/%E4%BC%A0%E8%BE%93%E5%B1%82%E6%80%BB%E7%BB%93/" />
<meta property="article:published_time" content="2020-04-30T00:00:00+00:00" />
<meta property="article:modified_time" content="2020-04-30T00:00:00+00:00" />

<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="5.传输层"/>
<meta name="twitter:description" content="传输层总结 TCP 三报文握手 点外卖：server店家等订单（连接请求），client设置参数下单（连接请求），店家发货（发送确认应答），应答一到c"/>


<link rel="apple-touch-icon" sizes="60x60" href="https://fziks.gitee.io/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://fziks.gitee.io/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://fziks.gitee.io/icons/favicon-16x16.png">
<link rel="manifest" href="https://fziks.gitee.io/icons/site.webmanifest">
<link rel="mask-icon" href="https://fziks.gitee.io/icons/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="https://fziks.gitee.io/icons/favicon.ico">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-config" content="/icons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">

<title>5.传输层</title>


<link rel="stylesheet" href="//at.alicdn.com/t/font_1559566_wk214kwa2dn.css">


    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">



    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.css" integrity="sha256-WAgYcAck1C1/zEl5sBl5cfyhxtLgKGdpI3oKyJffVRI=" crossorigin="anonymous" />
    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.css" integrity="sha256-a2tobsqlbgLsWs7ZVUGgP5IvWZsx8bTNQpzsqCSm5mk=" crossorigin="anonymous" />
    
   <link href="https://stackpath.bootstrapcdn.com/bootswatch/4.4.1/materia/bootstrap.min.css" rel="stylesheet" integrity="sha384-1tymk6x9Y5K+OF0tlmG2fDRcn67QGzBkiM3IgtJ3VrtGrIi5ryhHjKjeeS60f1FA" crossorigin="anonymous">
    
    
    <link rel="stylesheet" href="https://fziks.gitee.io/sass/main_cdn.min.270b43bb8631af4497ed45b90db42c517e86c9511418de9152f134d02ed32b87.min.2192baea245cf318085511589e62bfbdb3fbe4fb0eef718f1be9af91c10542ce.css" integity="sha256-IZK66iRc8xgIVRFYnmK/vbP75PsO73GPG&#43;mvkcEFQs4=">

</head>

<body style="overflow-x: unset;">
	<div class="container-fluid">
		<div class="row d-print-block">
			<div class="col-12 col-md-3 col-lg-2 bd-sidebar d-print-none">
				<div class="d-flex mt-3 border-bottom">
        <span class="navbar-brand w-100" style="display: grid;">
            <small>
                <a href="https://fziks.gitee.io/" class="text-black-50">
                    <i class="iconfont icon-back-arrow-"></i>
                </a>
                Ap Chen's
            </small>
            <a class="text-dark" href="https://fziks.gitee.io/notes/">
                Notes
            </a>
        </span>
        <button class="btn btn-link text-dark d-md-none p-0 ml-3" type="button" data-toggle="collapse"
            data-target="#bd-docs-nav" aria-controls="bd-docs-nav" aria-expanded="true"
            aria-label="Toggle docs navigation">
            <i class="fad fa-bars"></i>
        </button>
    </div>
				<nav id="bd-docs-nav" class="collapse bd-links">
    
    
    
    <div class="bd-toc-item active bg-light">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/computer-network/">
            <i class="iconfont icon-back-arrow-reverse"></i>
            计算机网络
        </a>
        <ul class="nav bd-sidenav">
            
            
            <li>
                <a href="https://fziks.gitee.io/notes/computer-network/%E7%BD%91%E7%BB%9C%E5%B1%82%E6%80%BB%E7%BB%93/">4.网络层</a>
            </li>
            
            
            
            <li class="active">
                <a href="https://fziks.gitee.io/notes/computer-network/%E4%BC%A0%E8%BE%93%E5%B1%82%E6%80%BB%E7%BB%93/">
                    <i class="fad fa-chevron-right mr-1"></i>
                    5.传输层
                </a>
            </li>
            
            
            
            <li>
                <a href="https://fziks.gitee.io/notes/computer-network/ripects/">RIP OSPF BGP</a>
            </li>
            
            
        </ul>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/operating-system/">
            
            
                <span class="icontext">S</span>
            
            
            操作系统
        </a>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/database/">
            
            
                <span class="icontext">S</span>
            
            
            数据库
        </a>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/cs50-introduction-to-computer-science/">
            
            
                <span class="icontext">S</span>
            
            
            CS50 MIT
        </a>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/software-enginerring/">
            
            
                <span class="icontext">E</span>
            
            
            软件工程
        </a>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/advanced-programming/">
            
            
                <span class="icontext">A</span>
            
            
            高级程序设计
        </a>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/deep-learning/">
            
            
                <span class="icontext">O</span>
            
            
            深度学习基础
        </a>
    </div>
    
    
    
    <div class="bd-toc-item">
        <a class="bd-toc-link" href="https://fziks.gitee.io/notes/%E6%96%87%E7%8C%AE%E7%AE%A1%E7%90%86%E4%B8%8E%E4%BF%A1%E6%81%AF%E5%88%86%E6%9E%90/">
            
            
                <span class="icontext">O</span>
            
            
            文献管理与信息分析
        </a>
    </div>
    
    
</nav>
			</div>
			<div class="col-12 col-md-9 col-lg-10 d-print-block">
				<div class="row d-print-block">
					<main class="col-12 col-md-10 col-lg-9 py-md-3 pl-md-5 bd-content d-print-block" role="main">
						<div id="title" class="my-4 border-bottom">
							<span>计算机网络</span>
							<h2>5.传输层</h2>
							<footer>
								<span>
									<i class="iconfont icon-NewFile mr-2"></i>
									2020-04-30 08:00 CST
								</span> <br />
								<span>
									<i class="iconfont icon-modify mr-2"></i>
									2020-04-30 08:00 CST
								</span> <br />
								<span>
									<i class="iconfont icon-copyright mr-2"></i>
									CC BY-NC 4.0
								</span>
							</footer>
						</div>
						<div id="content" class="hl-h2">
							
							
							
							
							
							
							
							
							
							
							
							
							<h1 id="传输层总结">传输层总结<a href="#传输层总结" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h1>
<h2 id="tcp-三报文握手">TCP 三报文握手<a href="#tcp-三报文握手" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h2>
<p>点外卖：server店家等订单（连接请求），client设置参数下单（连接请求），店家发货（发送确认应答），应答一到client最后确认，连接建立。</p>
<h3 id="全双工连接建立"><strong>全双工连接建立</strong><a href="#全双工连接建立" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<p>三次握手建立连接是一个<strong>同步</strong>的过程，<strong>交换初始</strong>
<strong>序列号</strong>，保证后续的每一个字节的可靠传输</p>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610193650297.png" alt="image-20200610193650297"></p>
<h3 id="安全性问题">安全性问题<a href="#安全性问题" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<p>SYN泛洪导致DoS攻击（伪造源IP）</p>
<p>server等不到第三次握手，因为IP是伪造的，应答信息送不到</p>
<h3 id="经典例题">经典例题<a href="#经典例题" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<h4 id="q使用2次握手来建立tcp连接可以吗">Q：使用2次握手来建立TCP连接可以吗？<a href="#q使用2次握手来建立tcp连接可以吗" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<p>为了<strong>保证服务端能收接受</strong>到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手，为了<strong>保证客户端能够接收</strong>到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。</p>
<h4 id="q为什么tcp连接建立过程又叫同步">Q：为什么TCP连接建立过程又叫同步？<a href="#q为什么tcp连接建立过程又叫同步" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<p>同步: 发送一个请求,等待返回,然后再发送下一个请求
三报文交替应答无主从之分，相互收发数据。</p>
<h2 id="tcp-连接释放">TCP 连接释放<a href="#tcp-连接释放" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h2>
<p>对称于连接，一方发送FIN置位了的TCP数据段，FIN被确认则单方向连接关闭，当双向连接都关闭则<strong>连接释放</strong></p>
<h3 id="两军对垒悖论">两军对垒悖论<a href="#两军对垒悖论" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<p>最后收信的一方始终无法知道对方是否确认。</p>
<p><strong>解决</strong>：把<strong>释放连接</strong>的决定权交给<strong>请求者独立裁定</strong>，再加个<strong>定时器</strong>。</p>
<p>如果初始DR的和重传都丢了，协议失败，另一方仍活跃则导致<strong>半开放现象</strong>。</p>
<p>杀死半开放连接: 规定连接过程中没有TPDUs到达就自动释放，而每隔时段发送<strong>哑TPDU</strong>以维持连接。</p>
<h3 id="释放连接">释放连接<a href="#释放连接" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<p>双方发送DR时都启动定时器</p>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610201916723.png" alt="image-20200610201916723"></p>
<h2 id="tcp传输策略">TCP传输策略<a href="#tcp传输策略" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h2>
<p>窗口尺寸：流控技术（ 防分段传输的大量数据淹没接收方）</p>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610204425930.png" alt="image-20200610204425930"></p>
<p>TCP数据段中，Windows size由接受方决定</p>
<p>当Window Size=0，有以下可以发送的数据段：</p>
<ul>
<li>Urgent数据</li>
<li><strong>发送者</strong>可发送一个<strong>字节的数据段</strong>，以便让接收者再次发送<strong>期待的接受的字节号（确认）<strong>和</strong>窗口数</strong>，以<strong>避免死锁</strong></li>
</ul>
<h3 id="坏情况-tcp性能退化">坏情况 TCP性能退化<a href="#坏情况-tcp性能退化" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<h4 id="telnet坏情况">Telnet坏情况<a href="#telnet坏情况" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610205002325.png" alt="image-20200610205002325"></p>
<p>不计算数据链路层等开销，要162字节带宽。</p>
<h4 id="傻瓜窗口综合症">傻瓜窗口综合症<a href="#傻瓜窗口综合症" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<p>接收方缓存已满，不一会空出1byte就迫不及待地发通知，双方就1byte的信息传来传去。</p>
<h3 id="优化策略">优化策略<a href="#优化策略" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<h4 id="捎带">捎带<a href="#捎带" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<h4 id="nagles-algorithm1984优化发送端">Nagle‘s algorithm（1984）优化发送端<a href="#nagles-algorithm1984优化发送端" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610205247329.png" alt="image-20200610205247329"></p>
<p>尽量不发小数据段，缓存再发</p>
<p>缺点：难及时响应  （对鼠标拖动等</p>
<h4 id="clark-优化接收端">Clark 优化接收端<a href="#clark-优化接收端" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<p>不请求对方发短数据段，等接收缓冲区足够大再发送窗口变更信息</p>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610205904700.png" alt="image-20200610205904700"></p>
<h2 id="tcp拥塞控制">TCP拥塞控制<a href="#tcp拥塞控制" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h2>
<p>核心思想：遵循<strong>分组守恒</strong>的原则，来控制数据率</p>
<blockquote>
<ul>
<li>拥塞监测</li>
</ul>
<p>监视超时的情况。因为all TCP算法假定超时是由拥塞引起</p>
<ul>
<li>拥塞控制</li>
</ul>
<p>用窗口尺寸来限制，建议发送方遵守以防接收方缓存溢出</p>
</blockquote>
<h3 id="两种因素引发拥塞"><strong>两种因素引发拥塞</strong><a href="#两种因素引发拥塞" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<p>网络容量（调整拥塞窗口）和接收者容量（接收者窗口）</p>
<p><strong>每个发送者维护两个窗口，发送的数据量小于二者即可</strong></p>
<blockquote>
<p>接收者窗口：反映目前接收者处理能力</p>
<p>拥塞窗口：反映网络目前的容量（难获取）</p>
</blockquote>
<h3 id="决定拥塞窗口的大小">决定拥塞窗口的大小<a href="#决定拥塞窗口的大小" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<ul>
<li>慢启动算法 （一点都不慢，指数级变动）</li>
</ul>
<p>发送者设置最大窗口，发最大数据段，若超期之前收到确认，则拥塞窗口翻倍，然后发送两个数据段（W Size=原先两倍）直到超时或达到接收方窗口大小</p>
<p>过了<strong>阈值</strong>，成线性增长</p>
<p>一旦<strong>超时</strong>，阈值降到当前一半，拥塞窗口降低到1</p>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610212551941.png" alt="image-20200610212551941"></p>
<p>快速恢复：</p>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610212646552.png" alt="image-20200610212646552"></p>
<p>超时可以是网络、也可以是人为（ICMP抑制分组）。</p>
<h3 id="经典例题-1">经典例题<a href="#经典例题-1" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h3>
<h4 id="q多次慢启动尝试cwnd是否会达到一个不变的常数">Q多次慢启动尝试，CWND是否会达到一个不变的常数？<a href="#q多次慢启动尝试cwnd是否会达到一个不变的常数" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h4>
<h2 id="定时器">定时器<a href="#定时器" class="anchor" aria-hidden="true"><i class="iconfont icon-link"></i></a></h2>
<p><img src="C:/Users/Cap/AppData/Roaming/Typora/typora-user-images/image-20200610213336337.png" alt="image-20200610213336337"></p>

						</div>
					</main>
					<div class="d-none d-lg-block col-lg-3 bd-toc d-print-none">
						<div class="btn-group-vertical w-100 my-3">
    
    <a class="btn btn-outline-secondary text-dark w-100 p-2" href="https://list.html" target="_blank">
        <i class="iconfont icon-LC_icon_list_line"></i><br />待更新列表
    </a>
    

    
    <a class="btn btn-outline-secondary text-dark w-100 p-2" href="mailto:littlegreedy@qq.com"
        target="_blank">
        <i class="iconfont icon-discussion"></i><br />纠错与咨询
    </a>
    
    
    
    
        <a class="btn btn-outline-secondary text-dark w-100 p-2" href="#" onclick="window.print()">
            <i class="iconfont icon-dayin"></i><br />打印本页
        </a>
    
    
</div>
						<h4 class="card-title pb-0">目录</h4>
						<nav id="TableOfContents">
  <ul>
    <li><a href="#tcp-三报文握手">TCP 三报文握手</a>
      <ul>
        <li><a href="#全双工连接建立"><strong>全双工连接建立</strong></a></li>
        <li><a href="#安全性问题">安全性问题</a></li>
        <li><a href="#经典例题">经典例题</a></li>
      </ul>
    </li>
    <li><a href="#tcp-连接释放">TCP 连接释放</a>
      <ul>
        <li><a href="#两军对垒悖论">两军对垒悖论</a></li>
        <li><a href="#释放连接">释放连接</a></li>
      </ul>
    </li>
    <li><a href="#tcp传输策略">TCP传输策略</a>
      <ul>
        <li><a href="#坏情况-tcp性能退化">坏情况 TCP性能退化</a></li>
        <li><a href="#优化策略">优化策略</a></li>
      </ul>
    </li>
    <li><a href="#tcp拥塞控制">TCP拥塞控制</a>
      <ul>
        <li><a href="#两种因素引发拥塞"><strong>两种因素引发拥塞</strong></a></li>
        <li><a href="#决定拥塞窗口的大小">决定拥塞窗口的大小</a></li>
        <li><a href="#经典例题-1">经典例题</a></li>
      </ul>
    </li>
    <li><a href="#定时器">定时器</a></li>
  </ul>
</nav>
						
						
						<div id="disqus_thread"></div>
							<script>
							

							

							(function() { 
							var d = document, s = d.createElement('script');
							s.src = "https://"+"your site name on disqus"+".disqus.com/embed.js";
							s.setAttribute('data-timestamp', +new Date());
							(d.head || d.body).appendChild(s);
							})();
							</script>
							<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>                  
					  	</div>
						
					</div>
				</div>
			</div>
		</div>
	</div>

	<script
    src="https://code.jquery.com/jquery-3.4.1.min.js"
    integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
    crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script><script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous"
onload="renderMathInElement(document.body);"></script>

<script type="text/javascript" src="https://fziks.gitee.io/custom.min.d3e1b7647f32dbe7e0140398739a26dad3f3470fc1eebe0741ef33668f1b7bd0b2917dc6efb9f0d9f1092b91dca502cab1b883863f02530133a8a8ef609926af.js" integrity="sha512-0&#43;G3ZH8y2&#43;fgFAOYc5om2tPzRw/B7r4HQe8zZo8be9CykX3G77nw2fEJK5HcpQLKsbiDhj8CUwEzqKjvYJkmrw=="></script>
<script type="text/javascript">

document.addEventListener("DOMContentLoaded", function () {
    renderMathInElement(
        document.body, {
            delimiters: [
                {
                    left: "$$",
                    right: "$$",
                    display: true
                },
                {
                    left: "\\[",
                    right: "\\]",
                    display: true
                },
                {
                    left: "$",
                    right: "$",
                    display: false
                },
                {
                    left: "\\(",
                    right: "\\)",
                    display: false
                }
            ],
            strict: false
        }
    );
});


$(document).on('click', 'a[href^="#"]', function (event) {
    event.preventDefault();

    $('html, body').animate({
        scrollTop: $($.attr(this, 'href')).offset().top
    }, 500);
});
</script>




</body>

</html>